/**
 * 发布订阅模式
 * 存储所有观察者（watcher）
 * 每个watcher都有一个update方法
 * 当数据发生变化的时候，通知subs里的每个watcher实例，触发update方法
 */
export default class Dep {
  constructor() {
    // 存储所有的观察者
    this.subs = [];
  }

  /**
   * 添加观察者
   * @param {*} watcher
   */
  addSub(watcher) {
    if (watcher && watcher.update) {
      this.subs.push(watcher);
    }
  }

  /**
   * 发送通知
   */
  notify() {
    this.subs.forEach((watcher) => {
      watcher.update();
    });
  }
}

// Dep在哪里实例化？在哪里addSub?
// Dep notify在哪里调用？
